package com.example.listafacil.componentes;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import android.content.ContentValues;
import android.content.Context;
import android.graphics.Paint;
import android.text.InputType;
import android.view.Gravity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.listafacil.BaseDados.TabelasCampos;

public abstract class ItemListaDeCompra extends LinearLayout {

	private static final String QUANTIDADE = "Quantidade: ";
	private static final String VALOR = "Valor: ";
	private TextView tvNome;
	private CheckBox cbxComprado;
	protected TextView tvQuantidade;
	protected TextView tvValor;
	private long id;
	private Map<String, String> valores;

	public ItemListaDeCompra(Context context, Map<String, String> valores, final boolean riscar) {
		super(context);
		setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		setOrientation(LinearLayout.HORIZONTAL);
		setGravity(Gravity.FILL_HORIZONTAL);

		if (valores == null) {
			valores = new HashMap<String, String>(3);
		}
		this.valores = valores;
		String valorID = valores.get(TabelasCampos.TabelaLista.ID_ITEM);
		if (valorID != null && !valorID.isEmpty()) {
			id = Long.parseLong(valorID);

		}

		String quantidade = valores.get(TabelasCampos.TabelaLista.QUANTIDADE);
		String valor = valores.get(TabelasCampos.TabelaLista.VALOR);
		String nome = valores.get(TabelasCampos.TabelaItem.NOME);

		cbxComprado = new CheckBox(context);
		cbxComprado.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		boolean comprado = false;
		if (quantidade != null && valor != null) {
			comprado = true;
		}
		cbxComprado.setChecked(comprado);
		cbxComprado.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				checkado(buttonView,isChecked);

			}
		});

		tvNome = new TextView(getContext());
//		tvNome.setEms(2);
		tvNome.setInputType(InputType.TYPE_CLASS_TEXT);
		if (nome != null) {
			tvNome.setText(nome);
		}
		tvNome.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
		tvNome.setSingleLine();
		tvNome.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Toast.makeText(getContext(), "Clicou no item", Toast.LENGTH_SHORT).show();

			}
		});
		if (comprado) {
			marcarComoComprado();
		}
		
		tvQuantidade = new TextView(getContext());
//		tvQuantidade.setEms(2);
		tvQuantidade.setInputType(InputType.TYPE_CLASS_TEXT);
		if (quantidade != null) {
			tvQuantidade.setText(QUANTIDADE+quantidade);
		}
		tvQuantidade.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		tvQuantidade.setSingleLine();
		
		
		tvValor = new TextView(getContext());
//		tvValor.setEms(2);
		tvValor.setInputType(InputType.TYPE_CLASS_TEXT);
		if (valor != null) {
			tvValor.setText(VALOR+valor);
		}
		tvValor.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		tvValor.setSingleLine();
		
		
		
		addView(cbxComprado);
		addView(tvNome);
		addView(tvQuantidade);
		addView(tvValor);
	}

	public abstract void caixadeTextoPerdeuOFoco(ItemListaDeCompra linha);

	public abstract void checkado(CompoundButton buttonView, boolean isChecked);

	public abstract void cliqueNoBotaoDeRemover();

	public Map<String, String> recuperarValores() {
		valores.put(TabelasCampos.TabelaItem.NOME, tvNome.getText().toString());
		// valores.put(TabelasCampos.TabelaItem.COMPRAR,
		// String.valueOf(cbx.isChecked()));
		valores.put(TabelasCampos.TabelaItem.ID_ITEM, String.valueOf(id));

		return valores;
	}

	public ContentValues recuperarValoresComoContentValues() {
		Map<String, String> recuperarValores = recuperarValores();
		Set<Entry<String, String>> entrySet = recuperarValores.entrySet();
		ContentValues valores = new ContentValues();
		for (Entry<String, String> entry : entrySet) {
			valores.put(entry.getKey(), entry.getValue());
		}
		return valores;
	}

	public void marcarComoComprado() {
		tvNome.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
		tvNome.setEnabled(false);
	}

	private void desmarcarComoComprado() {
		tvNome.setPaintFlags(0);
		tvNome.setEnabled(true);
	}
	
	public void limparValorEQuantidade(){
		tvValor.setText("");
		tvQuantidade.setText("");
		desmarcarComoComprado();
	}
	
	public Float getValor(){
		String textoValor= tvValor.getText().toString().replace(VALOR, "");
		if(textoValor.equals("")){
			return 0F;
		}
		return Float.parseFloat(textoValor);
	}
	
	public Integer getQuantidade(){
		String textoValor= tvQuantidade.getText().toString().replace(QUANTIDADE, "");
		if(textoValor.equals("")){
			return 0;
		}
		return Integer.parseInt(tvQuantidade.getText().toString().replace(QUANTIDADE, ""));
	}
	
	public void setValorEQuantidade(String valor,String quantidade){
		tvValor.setText(VALOR+ valor);
		tvQuantidade.setText(QUANTIDADE+ quantidade);
	}
}
